/* Use ltgen */

#include <stddef.h>
#include <stdio.h>

#include "src/ltbase.h"
#include "src/ltgen.h"
#include "src/ltt.h"
#include "src/ltt_testcase.h"

lt_UsingType(lt, USize);

static char const* gTestCaseNames[] = {
    "ltlexer_Next",
    "ltini_Section",
    NULL,
};

/* ltgen ltt_DeclareTestCases */
/* clang-format off */
extern ltt_TestCase ltt_TestCaseName(ltlexer_Next);
extern ltt_TestCase ltt_TestCaseName(ltini_Section);
/* clang-format on */
/* ltgen_End */

ltgen_Generator(ltt_DeclareTestCases) {
    printf("/* clang-format off */\n");
    for (USize i = 0; gTestCaseNames[i] != NULL; ++i) {
        printf("extern ltt_TestCase ltt_TestCaseName(%s);\n",
               gTestCaseNames[i]);
    }
    printf("/* clang-format on */\n");
    return 0;
}

ltt_TestCase**
ltt_GetTestCases(void) {
    static ltt_TestCase* testcase[] = {
        /* ltgen ltt_TestCasePtrs */
        &ltt_TestCaseName(ltlexer_Next),
        &ltt_TestCaseName(ltini_Section),
        /* ltgen_End */
        NULL,
    };
    return testcase;
}

ltgen_Generator(ltt_TestCasePtrs) {
    for (USize i = 0; gTestCaseNames[i] != NULL; ++i) {
        printf("        &ltt_TestCaseName(%s),\n", gTestCaseNames[i]);
    }
    return 0;
}
